import java.lang.reflect.Field;
import java.util.Arrays;

public class ReflectTest {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Class<Books> aClass = Books.class;

        // 获取所有 public 修饰的字段
        Field[] fields = aClass.getFields();
        System.out.println(fields.length);

        // 获取所有访问修饰符修饰的字段
        Field[] declaredFields = aClass.getDeclaredFields();
        System.out.println(Arrays.toString(declaredFields));

        // 获取一个指定的 public修饰的字段
        Field name = aClass.getField("name");
        System.out.println(name);

        // 获取一个指定的任意修饰符修饰的字段
        Field id = aClass.getDeclaredField("id");
        System.out.println(id);
        Books books = new Books();
        books.setName("天渊");
        // Field 对象调用 set 方法设置  第一个参数 是要设置的对象 要设置的值
        name.set(books,"天源");
        System.out.println(books.getName());

        // name Field对象 访问修饰符是 private
        name.setAccessible(true);
        name.set(books,"反派人生");
        System.out.println(name.get(books));
    }
}
